package com.df.my_net_game;

import com.baidu.bjf.remoting.protobuf.ProtobufProxy;
import com.df.my_net_game.game_rpc.EnableEZGame;
import com.df.my_net_game.services.ThirdService;
import io.netty.util.concurrent.Promise;
import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

/**
 * 消息url的id，消息体的id，消息序列id
 * 消息：
 * 消息len(header长度+body长度)
 * 消息header : url的id，msg的id，消息序列id
 * 消息body
 *
 * 消息分类：
 * 请求->回复
 * 请求->不回复
 * 服务器推送
 *
 *
 * 全局异常处理
 * 每个请求的统计
 * 连接建立，断开的事件
 * 集群，分布式下的日志问题
 *
 * rpc调用
 *
 * TODO websocket建立连接时 进行token校验，不符合的直接关闭连接，不用等待idle事件的时候才判定是否登录成功，减少恶意占有连接
 * 分布式日志收集处理,日志追踪
 *
 * 分布式下的节点客户端,节点服务,注册中心,配置中心(包括配置文件和springboot配置以及自定义配置)
 * 如果有注册中心和配置中心，目前只支持nacos，启动流程参考spring cloud
 *
 * 先单服  再分布式
 */
@EnableEZGame(serialize = "json")
@SpringBootApplication
public class MyNetGameApplication {


    public static void main(String[] args) {
        //TODO 先检查有没有bootstrap，有则检查需不需要注册中心拿配置，参考springcloud启动流程
        //TODO nacos的配置变动了要自动刷新
        ProtobufProxy.DEBUG_CONTROLLER.set(true);
        SpringApplication springApplication = new SpringApplication(MyNetGameApplication.class);
        springApplication.setBannerMode(Banner.Mode.OFF);
//        springApplication.setDefaultProperties();
        ConfigurableApplicationContext context = springApplication.run(args);
//        ConfigurableApplicationContext context = SpringApplication.run(MyNetGameApplication.class, args);
        ThirdService bean = context.getBean(ThirdService.class);
//        Promise<Integer> p = bean.checkOrder2(1);
//        Integer i = p.getNow();
//        System.out.println(i);
        //启动websocket服务器,协议，序列化 服务器单独线程处理
//        GWebsocketServer gWebsocketServer = GServer.websocketServer();
//        gWebsocketServer
//                .setPath("/game")
//                .setPort(9191);
//        gWebsocketServer.setMsgType(1);
//        gWebsocketServer.setServerCB(new JsonServerCb());
//        gWebsocketServer.addMsgInterceptor(new MyMsgInterceptor());
//        //TODO 设置消息分组
//        gWebsocketServer.start();

        //TODO 等待主线程，jvm监听结束，优雅关闭

//        710-6*10 = 650;
//        650/5 = 130
    }

}
